﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Collections;

using System.Web.SessionState;
using EDiamondModel;

#region xây dựng lớp sản phẩm cho giỏ hàng
public class MuaSanPham
{
    public int SanPhamID{get;set;}
    public string TenSanpham{get;set;}
    public int? Dongia{get;set;}
    public int Soluong{get;set;}
    public string Hinh { get; set; }
    public int Thanhtien
    {   
        get {return Convert.ToInt32(Soluong*(Dongia==null?0:Dongia));}
    }
}
#endregion

#region xây dựng các chức năng xử lý mua hàng
public class GioHang           
{
    public static List<MuaSanPham> NhanGiohang()       
    {
        return (List<MuaSanPham>)HttpContext.Current.Session["GioHang"];
    }
    public static void MuaSp(int pID, int pSoluong=1)
    {
        if (DacoSP(pID) >= 0)
            TangSoluong(pID, pSoluong);
        else
            ThemSp(pID, pSoluong);
        //HttpContext.Current.Response.Redirect(HttpContext.Current.Request.RawUrl);  //Giữ lại URL trước đó==> khắc phục làm tăng giá trị của session
    }
    public static void ThemSp(MuaSanPham pSanpham)
    {
        List<MuaSanPham> cart = (List<MuaSanPham>)HttpContext.Current.Session["GioHang"];
        if (cart == null) cart = new List<MuaSanPham>();
        MuaSanPham x = cart.Find(xx=> xx.SanPhamID == pSanpham.SanPhamID);
        if (x != null)
            return;
        else
            cart.Add(pSanpham);
    }
    public static void ThemSp(int pID, int pSoluong)
    {
        EDiamondEntities1 db = new EDiamondEntities1();
       
        SanPham tdon = db.SanPhams.FirstOrDefault(x => x.SanPhamID == pID);
        if (tdon != null)
        {
            MuaSanPham Sp = new MuaSanPham();
            Sp.SanPhamID = pID;
            Sp.TenSanpham = string.IsNullOrEmpty(tdon.TenSanPham) ? "" : tdon.TenSanPham;
            Sp.Soluong = pSoluong;
            Sp.Dongia = (tdon.KhuyenMai == null || tdon.KhuyenMai == 0) ? (tdon.DonGia.HasValue ? tdon.DonGia.Value : 0) : tdon.KhuyenMai;
            //Sp.Dongia = tdon.DonGia;
            Sp.Hinh = string.IsNullOrEmpty(tdon.Hinh) ? "" : tdon.Hinh;
            ThemSp(Sp);
        }
    }

    public static void XoaSp(MuaSanPham pSanpham)
    {
        List<MuaSanPham> cart = (List<MuaSanPham>)HttpContext.Current.Session["GioHang"];
        if (cart == null) return;
        cart.Remove(pSanpham);
    }
    public static void XoaSp(int Chiso)
    {
        List<MuaSanPham> Giohang = (List<MuaSanPham>)HttpContext.Current.Session["GioHang"];
        if (Giohang == null) return;
        Giohang.RemoveAt(Chiso);
    }

    public static void TangSoluong(MuaSanPham pSanpham, int pSoluong)
    {
        List<MuaSanPham> cart = (List<MuaSanPham>)HttpContext.Current.Session["GioHang"];
        if (cart == null) return;
        pSanpham.Soluong = pSanpham.Soluong + pSoluong;
        int i = cart.IndexOf(pSanpham);
        if (i != -1) cart[i] = pSanpham;
    }
    public static void TangSoluong(int pID, int pSoluong)
    {
        List<MuaSanPham> cart = (List<MuaSanPham>)HttpContext.Current.Session["GioHang"];
        if (cart == null) return;
        foreach (MuaSanPham sp in cart)
        {
            if (sp.SanPhamID == pID)
            {
                sp.Soluong += pSoluong;
                break;
            }
        }
    }

    public static void CapnhatSoluong(int chiso, int pSoluong)    //trang Giỏ hàng
    {
        List<MuaSanPham> cart = (List<MuaSanPham>)HttpContext.Current.Session["GioHang"];
        if (cart == null) return;
        cart[chiso].Soluong = pSoluong;
    }
    public static void CapnhatSoluong(MuaSanPham pSanpham, int pSoluong)
    {
        List<MuaSanPham> cart = (List<MuaSanPham>)HttpContext.Current.Session["GioHang"];
        if (cart == null) return;
        pSanpham.Soluong =  pSoluong;
        int i = cart.IndexOf(pSanpham); // Tìm thấy
        if (i != -1) cart[i] = pSanpham;
    }

    public static double TongTrigia()
    {
        List<MuaSanPham> cart = (List<MuaSanPham>)HttpContext.Current.Session["GioHang"];
        double tong = 0;
        if (cart == null)return 0;
        foreach (MuaSanPham sp in cart)
        {
            tong += sp.Thanhtien;
        }
        return tong;
    }
    public static int TongSanpham()
    {
        List<MuaSanPham> cart = (List<MuaSanPham>)HttpContext.Current.Session["GioHang"];
        return (cart !=null) ? cart.Count : 0;
    }

    public static int DacoSP(int pID)
    {
        List<MuaSanPham> cart = (List<MuaSanPham>)HttpContext.Current.Session["GioHang"];
        if (cart == null)return 0;
        for (int i = 0; i < cart.Count; i++ )
        {
            if (cart[i].SanPhamID == pID)
                return i;
        }
        return -1;
    }

    //Cập nhật giỏ hàng vào đơn hàng (CSDL)
    public static string CapNhatGioHang()
    {
        string kq ="";
        try
        {
            List<MuaSanPham> gio = NhanGiohang();
            if (gio.Count > 0)
            {
                //1. Cập nhật DatHang
                EDiamondEntities1 db = new EDiamondEntities1();
                //var bdh = db.DatHangs.Where(x => x.DatHangID == 0);

                string Mdn = (string)HttpContext.Current.Session["Madn"];
                //C1
                KhachHang kh = db.KhachHangs.FirstOrDefault(x => x.TenDangNhap == Mdn);
                //C2
                //KhachHang kh = KhachHang.DocTheoTendn(Mdn);
               
                DatHang ddh = new DatHang
                {
                    NgayDatHang = DateTime.Today,
                    DaGiao = false,
                    KhachHangID = kh.KhachHangID,
                    TriGia = Convert.ToInt32(TongTrigia())
                };
                db.DatHangs.AddObject(ddh);
                db.SaveChanges();
                //2. Cập nhật DatHangCT
                var ctdh = db.DatHangCTs.Where(x => x.DatHangID == 0);
                foreach (MuaSanPham sp in gio)
                {
                    DatHangCT ct = new DatHangCT
                    {
                        DatHangID = ddh.DatHangID,
                        SanPhamID = sp.SanPhamID,
                        SoLuong = sp.Soluong,
                        DonGia = sp.Dongia,
                        ThanhTien = sp.Thanhtien
                    };
                    db.DatHangCTs.AddObject(ct);
                }

                db.SaveChanges();
                kq = "Đã cập nhật đơn hàng của quý khách!!!";
                //xóa lưới xóa phiên làm việc của Khách hàng hiện hành
                ((List<SanPham>)HttpContext.Current.Session["GioHang"]).Clear();
            }
            else
                kq = "Giỏ hàng chưa có san phẩm nào";
        }
        catch (Exception ex)
        {
            kq = "Lỗi cập nhật đơn hàng !!! + (" + ex.Message + ")";
        }
        return kq;
    }
}
#endregion
